home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
comm
/
ums
/
ums109_1.lha
/
Tools
/
ReadMessage.LHA
/
ReadMessage
/
txt
/
ReadMessage.mod
next >
Wrap
Text File
|
1994-04-06
|
6KB
|
173 lines
(* ------------------------------------------------------------------------
:Program. ReadMessage
:Contents. reads a message from UMS' messagebase
:Author. Kai Bolay [kai]
:Address. Snail Mail: EMail:
:Address. Hoffmannstraße 168 UUCP: kai@amokle.stgt.sub.org
:Address. D-71229 Leonberg FIDO: 2:2407/106.3
:History. v1.0 [kai] 25-Mar-93 added Martin's suggestion
:History. v1.1 [kai] 31-Mar-93 new tags
:History. v1.2 [kai] 15-Apr-93 added SERVER keyword, better Login() failure
:History. v1.3 [kai] 22-Sep-93 updated for V40 Intefaces
:History. v1.4 [hG] 06 Apr 1994 outputs flags and more fields
:Copyright. Public Domain
:Language. Oberon
:Translator. AmigaOberon 3.11
:Imports. ums, UMSSupport[hG]
:Bugs. Does not display links (crosspostings, carbon copies)
------------------------------------------------------------------------ *)
MODULE ReadMessage;
IMPORT
ums,
US := UMSSupport,
I: Intuition, d: Dos, e: Exec, u: Utility,
NoGuru, Break,
y: SYSTEM;
CONST
Template = "USER/A,PASSWORD,SERVER/K,NUM/A/N,NoText=OnlyHeaders/S,NoUpdate/S"
"\o$VER: ReadMessage 1.4 (6.4.94)";
TYPE
FlagTexts = ARRAY MAX(LONGSET)+1 OF ARRAY 20 OF CHAR;
CONST
userFlagTexts = FlagTexts(
"0","1","2","3", "Archive", "Junk", "PostPoned",
"Selected", "Old", "WriteAccess", "ReadAccess",
"ViewAccess", "Owner", "13", "14", "Filtered",
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26",
"27", "28", "29", "30", "31");
globalFlagTexts = FlagTexts(
"Deleted", "Expired", "Exported", "Orphan", "Link", "HardLink",
"6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26",
"27", "28", "29", "30", "31");
VAR
rd: d.RDArgsPtr;
args: STRUCT (dummy: d.ArgsStruct)
name: e.STRPTR;
password: e.STRPTR;
server: e.STRPTR;
num: UNTRACED POINTER TO LONGINT;
noText: d.ArgBool;
noUpdate: d.ArgBool;
END;
account: LONGINT;
fields: ums.MsgTextFields;
chain: ARRAY 4 OF LONGINT;
globalFlags, userFlags: LONGSET;
PROCEDURE WriteAddress(name, addr: INTEGER; text: ARRAY OF CHAR); (* $CopyArrays- *)
BEGIN
IF fields[name] # NIL THEN
IF fields[addr] = NIL THEN fields[addr] := y.VAL (ums.STRPTR, y.ADR ("")) END;
d.PrintF ("%s: %s <%s>\n", y.ADR(text), fields[name], fields[addr]);
END;
END WriteAddress;
PROCEDURE WriteField(num: INTEGER; text: ARRAY OF CHAR); (* $CopyArrays- *)
BEGIN
IF fields[num] # NIL THEN d.PrintF ("%s: %s\n", y.ADR(text), fields[num]); END;
END WriteField;
PROCEDURE WriteFlags(flags: LONGSET; texts: FlagTexts; title: ARRAY OF CHAR);
(* $CopyArrays- *)
VAR
i: INTEGER;
BEGIN
IF flags # LONGSET{} THEN
i := 0;
d.PrintF("%s: ", y.ADR(title));
REPEAT
IF i IN flags THEN d.PrintF("%s ", y.ADR(texts[i])); END;
INC(i);
UNTIL i>MAX(LONGSET);
d.PrintF("\n");
END;
END WriteFlags;
BEGIN
rd := d.ReadArgs (Template, args, NIL);
IF rd = NIL THEN
d.PrintF ("Usage: %s\n", y.ADR (Template));
HALT (20);
END;
(* $OddChk- $NilChk- *)
account := ums.UMSRLogin (args.server^, args.name^, args.password^);
(* $OddChk= $NilChk= *)
IF account <= 0 THEN
d.PrintF ("Unable to login\n");
HALT (20);
END;
(* read the message *)
IF ums.ReadUMSMsgTags (account,
ums.tagMsgNum, args.num^,
ums.tagTextFields, y.ADR (fields),
ums.tagRReadAll, I.LTRUE,
ums.tagRNoUpdate, args.noUpdate,
ums.tagRChainUp, y.ADR(chain[0]),
ums.tagRChainDn, y.ADR(chain[1]),
ums.tagRChainLt, y.ADR(chain[2]),
ums.tagRChainRt, y.ADR(chain[3]),
ums.tagRGlobalFlags, y.ADR(globalFlags),
ums.tagRUserFlags, y.ADR(userFlags),
u.done) THEN END;
US.CheckErr(account);
WriteAddress(ums.fromName, ums.fromAddr, "From");
WriteAddress(ums.replyName, ums.replyAddr, "Reply To");
WriteAddress(ums.toName, ums.toAddr, "To");
WriteField(ums.subject, "Subject");
WriteField(ums.group, "Group");
WriteField(ums.replyGroup, "Reply Group");
WriteField(ums.folder, "Folder");
WriteField(ums.msgID, "Message ID");
WriteField(ums.fidoID, "FidoID: %\sn");
WriteField(ums.mausID, "MausID");
WriteField(ums.refID, "Refer ID");
WriteField(ums.creationDate,"Creation Date");
WriteField(ums.receiveDate, "Receive Date");
WriteField(ums.attributes, "Attributes");
WriteField(ums.organization,"Organization");
WriteField(ums.distribution,"Distribution");
WriteField(ums.newsreader, "Newsreader");
(* WriteField(ums.comments, "Comments"); *)
WriteField(ums.errorText, "ErrorText");
WriteFlags(globalFlags,globalFlagTexts,"Global Status");
WriteFlags(userFlags,userFlagTexts,"User Status");
(* Message-Tree This is a tree of messages build by UMS regarding *)
(* a the reference IDs of messages. (a) and (c) both *)
(* / \ refer to (a). (d), (e) and (f) refer to (b) and *)
(* b c (g) refers to (e). If you read message (e) you'll *)
(* /|\ get (b) for chain up ("-"), (g) for chain down ("+") *)
(* d e f and (d) and (f) as chain left ("<") and right (">"). *)
(* | Please support this in a newsreader and don't forget *)
(* g to create reference IDs in replies and follow-up *)
d.PrintF ("Chain: -%-5ld +%-5ld <%-5ld >%-5ld\n", chain[0], chain[1], chain[2], chain[3]);
IF args.noText = d.DOSFALSE THEN
d.PrintF ("\n%s\n%s\n", fields[ums.msgText], fields[ums.comments]);
ELSE
d.PrintF ("Comments:\n%s\n", fields[ums.comments]);
END;
ums.FreeUMSMsg (account, args.num^);
CLOSE
IF account # NIL THEN ums.Logout (account); END;
IF rd # NIL THEN d.FreeArgs (rd); END;
END ReadMessage.